package org.example.app.web.api;

import jakarta.servlet.http.HttpServletRequest;
import org.example.app.web.vm.UserVm;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

public interface userController {
            /**
         * 用户登录接口
         *
         * @param userVm 用户视图模型，包含用户登录所需的用户名和密码
         * @return 登录结果，通常包括用户信息和令牌
         */
        public String login(@RequestBody UserVm userVm);

        /**
         * 用户注册接口
         *
         * @param userVm 用户视图模型，包含用户注册所需的信息，如用户名、密码等
         * @return 注册结果，可能包括用户信息或注册状态
         */
        public String register(@RequestBody UserVm userVm);

        /**
         * 获取用户列表接口
         *
         * @param request HTTP请求对象，可用于获取请求相关的参数或头信息
         * @return 用户列表信息，通常是用户简要信息的集合
         */
        public String getList(HttpServletRequest request);

        /**
         * 获取用户详情接口
         *
         * @param id 用户ID，用于指定需要获取详细信息的用户
         * @param request HTTP请求对象，可用于获取请求相关的参数或头信息
         * @return 用户详细信息，包括用户的各种详细数据
         */
        public String getDetail(@PathVariable Integer id, HttpServletRequest request);

        /**
         * 更新用户信息接口
         *
         * @param id 用户ID，用于指定需要更新的用户
         * @param userVm 用户视图模型，包含需要更新的用户信息
         * @param request HTTP请求对象，可用于获取请求相关的参数或头信息
         * @return 更新结果，通常是更新后的用户信息或状态
         */
        public String update(@PathVariable Integer id,@RequestBody UserVm userVm,HttpServletRequest request);

        /**
         * 删除用户接口
         *
         * @param id 用户ID，用于指定需要删除的用户
         * @param request HTTP请求对象，可用于获取请求相关的参数或头信息
         * @return 删除结果，通常是删除状态或相关提示信息
         */
        public String delete(@PathVariable Integer id, HttpServletRequest request);

        /**
         * 重置用户密码
         *
         * @param userVm 用户视图模型，包含用户的相关信息，如用户名、新密码等
         * @return 返回一个字符串，通常用于表示密码重置的结果或状态
         */
        public String resetPassword(@RequestBody UserVm userVm);


        @PostMapping("/emailCode")
        String emailCode(@RequestBody UserVm userVm);
}
